#include "EnemyRed.h"
#define BULLET_VECTOR_0 3
#define PI 3.14159265

int CEnemyRed::_GunXPosition[10] = { -32, -32, -32, -32, -32, 32, 32, 32, 32, 32 };
int CEnemyRed::_GunYPosition[10] = { 40, 40, 22, 22, -8, -8, 22, 22, 40, 40 };
double CEnemyRed::_ShootAngle[10] = { 150, 90, 180, 180, -150, -30, 0, 0, 30, 90 };


CEnemyRed::CEnemyRed()
{
	_current_Sprite = 0;
	_frame_Start_Red = GetTickCount();
	_now = GetTickCount();
	_tick_Per_Frame = 1000 / FRAME_RATE;
}

void CEnemyRed::LoadResource()
{
	_EnemyRed = CSpriteManager::getInstance()->GetEnemySprite(EnemyRed);

	_x = -100;
	_y = -100;
	_ListBullet = new CListBullet(6);
	_ShootCount = 0;
}

void CEnemyRed::Update(D3DXVECTOR2 ContraPositon)
{
	_IsShootable = true;
	//Enemy sniper

	DWORD now1 = GetTickCount();

	if (now1 - _frame_Start_Red >= _tick_Per_Frame)
	{
		_frame_Start_Red = now1;

		//Compare position contra vs enemy

		if ((ContraPositon.y > _y +35 ) && (ContraPositon.x < _x))
		{
			//_EnemyRed[red_enemy_count]->Next(0, 1);
			_current_Sprite = Next(_current_Sprite, 0, 0);
		}
		else if ((ContraPositon.y == _y +35) && (ContraPositon.x < _x))
			_current_Sprite = Next(_current_Sprite, 2, 2);
		else
		if ((ContraPositon.y < _y +35 ) && (ContraPositon.x < _x))
			_current_Sprite = Next(_current_Sprite, 4, 4);
		else
		if ((ContraPositon.y <  _y +35 ) && (ContraPositon.x > _x))
			_current_Sprite = Next(_current_Sprite, 5, 5);
		else
		if ((ContraPositon.y > _y +35) && (ContraPositon.x > _x))
			_current_Sprite = Next(_current_Sprite, 8, 8);
		else
		if ((ContraPositon.y == _y +35 ) && (ContraPositon.x > _x))
			_current_Sprite = Next(_current_Sprite, 6, 6);
	}

}
void CEnemyRed::Render(D3DXVECTOR2 ContraPositon)
{
	double itemp_x = 0;
	double itemp_y = 0;

	if (ContraPositon.x != _x && ContraPositon.y != _y)
	{

		if (ContraPositon.y > _y)
		{
			if (ContraPositon.x < _x)
			{
				itemp_x = (ContraPositon.x - _x) / (ContraPositon.y - _y);
				itemp_y = (_y - ContraPositon.y) / (ContraPositon.x - _x);
			}
			else if (ContraPositon.x > _x)
			{
				itemp_x = (ContraPositon.x - _x) / (ContraPositon.y - _y);
				itemp_y = (ContraPositon.y - _y) / (ContraPositon.x - _x);
			}
		}
		else
		{
			if (ContraPositon.x < _x)
			{
				itemp_x = (_x - ContraPositon.x) / (ContraPositon.y - _y);
				itemp_y = (_y - ContraPositon.y) / (ContraPositon.x - _x);
			}
			else if (ContraPositon.x > _x)
			{
				itemp_x = (_x - ContraPositon.x) / (ContraPositon.y - _y);
				itemp_y = (ContraPositon.y - _y) / (ContraPositon.x - _x);
			}
		}

	}
	if (itemp_x > 2) itemp_x = 2;
	if (itemp_y > 2) itemp_y = 2;

	if ((ContraPositon.x < SCREEN_WIDTH / 2 && abs(ContraPositon.x - _x) <= SCREEN_WIDTH + FRAMEWIDTH) || abs(ContraPositon.x - _x) < SCREEN_WIDTH / 2 + FRAMEWIDTH || (ContraPositon.x > GAMEWORLDWIDTH - SCREEN_WIDTH / 2 && abs(_x - ContraPositon.x) < SCREEN_WIDTH + FRAMEWIDTH))
	{
		//_now = GetTickCount();
		Update(ContraPositon);

		if (GetTickCount() - _now >= 800)
		{
			_ListBullet->Shoot(_x + _GunXPosition[_current_Sprite], _y + _GunYPosition[_current_Sprite], 3000, BULLET_VECTOR_0 * itemp_x, BULLET_VECTOR_0 * itemp_y, 2);
			_now = GetTickCount();
		}
		_ListBullet->Render();

		//Enemy Red

		_EnemyRed->Render(_x, _y, _current_Sprite);
	}

}
Box CEnemyRed::GetBox()
{
	return Box();
}
CEnemyRed::~CEnemyRed()
{
}
